TS
是JS
的超集,支持所有JS
的特性,并提供的安全类型支持。
当下在日常开发中与平时书写 demo 时,更多时候会用上 TS
,
但是 Node.js
不能直接执行 TypeScript
,需要提前做一些处理。
下面分场景介绍多种解决方案 (主要以 0 配置的工具为主):
Node.js
加载自定义文件支持;最后再补充一些知识,介绍文中提到的相关库/工具,用于测试的代码如下。
ts
enum Fruit {
apple = 1,
orange = 2
}
const fruit: number = Fruit.apple
console.log(fruit)
最常见的就是将 TS 编译为 js 再通过 Node
执行,在实际生产环境中大部分情况下也是编译的方式,下面介绍几个支持 0 配置开箱即用的。
TS
官方提供的一个 CLI 工具。
① 安装依赖
sh
npm i typescript
② 执行编译
sh
tsc index.ts
可以将执行添加到 package.json scripts
中。
json
"tsc:compile": "tsc index.ts"
然后通过 npm run
执行对应指令。
sh
npm run tsc:compile
下面是运行示例,
当然还可以通过 npx 调用。
sh
npx tsc index.ts
PS:后续的示例都将会执行指令以 npm 命令的形式写入到 package.json
中。
ncc 是一个简单的 CLI,可以将 Node.js 项目编译为单个文件。
① 安装依赖
sh
npm i @vercel/ncc
② 执行编译
sh
ncc build ./index.ts
下面是运行示例。
基于 esbuild 实现的 0 配置 TS 打包工具。
PS:esbuild 是使用 Go 编写的一个 Web 场景的构建工具。
① 安装依赖
sh
npm i tsup
② 执行编译
sh
tsup ./index.ts
下面是运行示例。
Bun 是一个极快的 JavaScript 运行时。
all-in-one:支持运行、测试、转译和打包 JavaScript 和 TypeScript 项目。
本小节介绍一下 build 功能。
① 安装 Bun
```sh
curl -fsSL https://bun.sh/install | bash
npm install -g bun ```
② 执行 build
sh
bun build ./index.ts --outdir ./
Node.js 中可以通过自定义 module.Module._extensions
的值来实现加载自定义的文件类型的功能。
咱们可以定义 .ts
文件的支持,下面是示例代码 ts-register.js
。
```ts const ts = require('typescript') // 导入 TypeScript 编译器 const fs = require('fs') // 导入文件系统模块
// 自定义 .ts 文件的加载器 require.extensions['.ts'] = function (module, filename) { const content = fs.readFileSync(filename, 'utf8') // 读取文件内容 const compiled = ts.transpileModule(content, { // 编译 TypeScript 代码 compilerOptions: { module: ts.ModuleKind.CommonJS } }) module._compile(compiled.outputText, filename) // 执行编译后的代码 } ```
同时可以通过 -r
参数指定预加载的模块或执行的文件,
因此两者结合就可以直接运行 TS
文件。
sh
node -r ./ts-register.js index.ts
接下来将介绍的一些直接运行 TS 的 CLI 工具也大多是这个原理。
一些基于第三方 TS 编译工具封装的 Node CLI 工具也可以直接运行 TS,
下面介绍几个常用的,同时 这些CLI工具都使用全局依赖的形式安装
。
ts-node 是 Node.js 的 TypeScript 执行引擎和 REPL。
① 安装依赖
sh
npm install -g typescript
npm install -g ts-node
② 运行
sh
ts-node ./index.ts
支持直接执行 TypeScript:基于 esbuild 增强的 Node.js 实现,速度更快。
① 安装依赖
sh
npm i -g tsx
② 运行
sh
tsx index.ts
由 SWC 驱动的 TS 运行时。
PS:SWC (Speedy Web Compiler) 是使用 Rust
编写的极快的 TypeScript / JavaScript 编译器。
① 安装依赖
sh
npm i -g swno
② 运行
sh
swno index.ts
JavaScript 运行时除了 Node.js 外还有其它的,下面介绍另外 2 个当下比较流行的 JS 运行时,同时它们也是 TS 运行时。
Deno
的标志是一只恐龙,emm 好几种读法,其中读 dino(滴No)
的比较多。
由 Node 之父 Ryan Dahl
打造,由于 Node.js
存在很多历史问题,所以准备从 0-1 打造一个替代品,Deno
刚好就是 Node
字母的重新组合 Node = no + de
。
① 安装 (通过 Shell 直接安装)
sh
curl -fsSL https://deno.land/x/install/install.sh | sh
添加环境变量 .zshrc
sh
export DENO_INSTALL="/Users/sugar/.deno"
export PATH="$DENO_INSTALL/bin:$PATH"
② 运行 TS
sh
deno run index.ts
Bun
的 logo 是一个可爱的包子,前面已经简单介绍过了,目标是准备做一个 JS/TS生态下
all-in-one 的工具。
速度吊打当前的 Deno
和 Node
运行 TS 的方式也很简单直接。
sh
bun index.ts
TypeScript
是当下最流行的变成语言之一,本节内容分类介绍了多种通过 Node.js 运行 TS 的方法:
tsc
,ncc
,tsup
,bun
;module.Module._extensions
支持;ts-node
,tsx
,swno
;Deno
,Bun
。针对不同的场景,合理运用上面的工具,可以极大的提高开发效率。